#ifndef VISTAQT_H
#define VISTAQT_H

#include <QGraphicsView>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QPainter>
#include <QComboBox>
#include <QSpinBox>
#include <QApplication>
#include <QColor>
#include <QBrush>
#include <QPen>
#include <QMouseEvent>
#include <QTimer>
#include <QMouseEvent>
#include <QFileDialog>
#include <QMessageBox>

#include "ui_VistaQt.h"
#include "../Vista/Vista.h"


#include <QMainWindow>

namespace Ui {
class VistaQt;
}


class VistaQt : public QMainWindow, public Vista
{
    Q_OBJECT
public:
    explicit VistaQt(QWidget *parent = 0);
/*! 
 \brief 
 \retval :
 \param 0 : 
*/
    ~VistaQt();
/*! 
 \brief 
 \retval void :
 \param  : 
*/
    void actualizar();
/*! 
 \brief Actualiza una casilla 
 \retval void :
 \param tempposx : 
 \param tempposy : 
*/
    void Pinta(int tempposx, int tempposy);
/*! 
 \brief 
 \retval void :
 \param  : 
*/
    void Pinta2();
/*! 
 \brief 
 \retval void :
 \param  : 
*/
    void Pinta3();
/*! 
 \brief Actualiza la casilla del modelo 
 \retval void :
 \param tempposx : 
 \param tempposy : 
*/
    void ActualizaEstado(int tempposx, int tempposy);


protected slots:
/*! 
 \brief Salir de la aplicacion
 \retval void :
 \param  : 
*/
    void on_actionSalir_triggered();
/*! 
 \brief Cambia el algortimo de evolucion
 \retval void :
 \param index : 
*/
    void on_Variantes_activated(int index);
/*! 
 \brief Cambia el tamanyo del tablero
 \retval void :
 \param arg1 : 
*/
    void on_spinBox_valueChanged(int arg1);
/*! 
 \brief Calcula la siguiente generacion
 \retval void :
 \param  : 
*/
    void on_timeout();
/*! 
 \brief Actualiza la casilla cuando se hace click
 \retval void :
 \param tempposx : 
 \param tempposy : 
*/
    void on_mousePress(int tempposx,int tempposy);
/*! 
 \brief Actualiza la casilla cuando el raton se mueve
 \retval void :
 \param movex : 
 \param movey : 
*/
    void on_mouseMove(int movex, int movey);
/*! 
 \brief Cambia el estado del pixel guardado 
 \retval void :
 \param tempposx : 
 \param tempposy : 
*/
    void on_mouseRelease(int tempposx, int tempposy);
/*! 
 \brief Actualiza el timer
 \retval void :
 \param  : 
*/
    void on_ButtonStart_clicked();
/*! 
 \brief Desactiva el timer
 \retval void :
 \param  : 
*/
    void on_ButtonStop_clicked();
/*! 
 \brief 
 \retval void :
 \param iconSize : 
*/
    void on_iconSizeChanged(QSize iconSize);
/*! 
 \brief Guarda el estado del tablero 
 \retval void :
 \param  : 
*/
    void on_actionGuardar_triggered();
/*! 
 \brief Abre el fichero con un tablero
 \retval void :
 \param  : 
*/
    void on_actionAbrir_triggered();
/*! 
 \brief Limpia el tablero
 \retval void :
 \param  : 
*/
    void on_actionNuevo_triggered();
/*! 
 \brief Muestra el Dialogo AcercaDe
 \retval void :
 \param  : 
*/
    void on_AcercaDe_Triggerred();

private:
    Ui::VistaQt* ui;
    CustomView* Canvas;
    QComboBox* Variante;
    QSpinBox* Dimension;
    QGraphicsScene* Escena;
    QPainter* Lienzo;
    QTimer *timer;

    int X;
    int Y;

    int recorteX;
    int recorteY;
    int sizeH;
    int sizeW;


};

#endif // VISTAQT_H
